"""文件拖拽示例模块

该模块演示了如何实现文件拖拽功能，允许用户将文件拖拽到窗口中进行处理。
"""

import sys
from PySide6.QtWidgets import QWidget, QApplication, QLineEdit, QMainWindow, QTextBrowser


class Window(QMainWindow):
    """文件拖拽窗口类
    
    创建一个支持文件拖拽的主窗口，显示拖拽进来的文件路径。
    """
    
    def __init__(self):
        """初始化窗口组件"""
        super(Window, self).__init__()
        self.paths = ""  # 存储拖拽进来的文件路径
        self.setWindowTitle('文件拖入')  # 设置窗口标题
        self.resize(500, 400)  # 设置窗口大小
        self.textBrowser = QTextBrowser()
        self.setCentralWidget(self.textBrowser)  # 设置窗口中心部件为文本浏览器
        self.setAcceptDrops(True)  # 设置窗口支持拖动（必须设置）

    def dragEnterEvent(self, event):
        """鼠标拖入事件处理函数
        
        当用户将文件拖拽到窗口时，处理拖拽事件并显示文件路径。
        
        Args:
            event: 拖拽事件对象
        """
        self.setWindowTitle('dragEnterEvent')
        file = event.mimeData().urls()[0].toLocalFile()  # 获取文件路径

        print(file)

        if file not in self.paths:  # 去重显示
            print("拖拽的文件 ==> {}".format(file))
            self.paths += file + "\n"
            self.textBrowser.setText(self.paths)
            # 接受鼠标放开事件
            event.accept()


if __name__ == "__main__":
    # 创建应用程序实例
    app = QApplication(sys.argv)
    
    # 创建并显示窗口
    window = Window()
    window.show()
    
    # 运行应用程序事件循环
    sys.exit(app.exec())